package com.speily.server.search.springConfig;

import com.speily.server.search._doc.Article;
import com.speily.server.search.service.ArticleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @Auther: SPL
 * @Date: 2019-08-19 11:48
 * @Description: - 初始化ES
 */
@Component
@Slf4j
public class EsDataInit implements InitializingBean {

    @Autowired
    private ArticleService articleService;

    /**
     * spring容器启动后，初始化数据
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        log.info("============ Spring容器启动后，初始化数据 =========");

        /*Article productDocument = Article.builder()
                .id(System.currentTimeMillis() + "01")
                .tittle("Java集合框架-1")
                .content("Java集合类简介：" +
                        "Java集合大致可以分为Set、List、Queue和Map四种体系，其中Set代表无序、不可重复的集合；List代表有序、重复的集合；而Map则代表具有映射关系的集合，Java 5 又增加了Queue体系集合，代表一种队列集合实现。" +
                        "Java集合就像一种容器，可以把多个对象（实际上是对象的引用，但习惯上都称对象）“丢进”该容器中。从Java 5 增加了泛型以后，Java集合可以记住容器中对象的数据类型，使得编码更加简洁、健壮。" +
                        "作者：Ruheng" +
                        "链接：https://www.jianshu.com/p/589d58033841" +
                        "来源：简书" +
                        "简书著作权归作者所有，任何形式的转载都请联系作者获得授权并注明出处。")
                .createTime(new Date())
                .updateTime(new Date())
                .build();

        Article productDocument1 = Article.builder()
                .id(System.currentTimeMillis() + "02")
                .tittle("JVM运行原理及调优")
                .content("JVM类加载相关策略" +
                        "全盘负责，当一个类加载器负责加载某个Class时，该Class所依赖的和引用的其他Class也将由该类加载器负责载入，除非显示使用另外一个类加载器来载入" +
                        "父类委托（双亲委派），先让父类加载器试图加载该类，只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类（为了避免不同的加载器 加载相同的类 出现重复字节）" +
                        "缓存机制，缓存机制将会保证所有加载过的Class都会被缓存，当程序中需要使用某个Class时，类加载器先从缓存区寻找该Class，只有缓存区不存在，系统才会读取该类对应的二进制数据，" +
                        "并将其转换成Class对象，存入缓存区。这就是为什么修改了Class后，必须重启JVM，程序的修改才会生效")
                .createTime(new Date())
                .updateTime(new Date())
                .build();

        Article productDocument2 = Article.builder()
                .id(System.currentTimeMillis() + "03")
                .tittle("Java多线程详细介绍")
                .content("一.  java内存模型(JMM)" +
                        "1.1  java内存模型(JMM)介绍" +
                        "java内存模型决定一个线程对共享变量的写入何时对另一个线程可见。从抽样的角度来说：线程之间的共享变量存储在主内存(main memory)中，每个线程都有一个私有的本地内存(local memory)，本地内存中存储了该线程以读/写共享变量的副本。" +
                        "存在两种内存：主内存和线程本地内存，线程开始时，会复制一份共享变量的副本放在本地内存中。" +
                        "线程对共享变量操作其实都是操作线程本地内存中的副本变量，当副本变量发生改变时，线程会将它刷新到主内存中(并不一定立即刷新，何时刷新由线程自己控制)。" +
                        "当主内存中变量发生改变，就会通知发出信号通知其他线程将该变量的缓存行置为无效状态，" +
                        "因此当其他线程从本地内存读取这个变量时，发现这个变量已经无效了，那么它就会从内存重新读取。")
                .createTime(new Date())
                .updateTime(new Date())
                .build();

        articleService.save(productDocument,productDocument1,productDocument2);

        log.info("【创建索引ID】:{},{},{}",productDocument.getId(),productDocument1.getId(),productDocument2.getId());
        log.info("【创建索引后的数据条数】：{}",articleService.getAll().size());*/
    }
}
